package org.shj.pattern.composite

/**
 * 组合模式使得用户对单个对象和组合对象的使用具有一致性
 * 主要解决： 它在我们树型结构的问题中，模糊了简单元素和复杂元素的概念，客户程序可以像处理简单元素
 *         一样来处理复杂元素，从而使得客户程序与复杂的内部结构解耦
 */
object CompositeMain {
  def main(args: Array[String]): Unit = {
    val comp1 = new Company("Singtel")
    val dept1 = new Department("Finance")
    val dept2 = new Department("HR")
    comp1.add(dept1)
    comp1.add(dept2)
    
    val comp2 = new Company("NCS")
    comp1.add(comp2)
    val dept3 = new Department("Finance")
    val dept4 = new Department("HR")
    comp2.add(dept3)
    comp2.add(dept4)
    
    val comp3 = new Company("SZ NCS")
    comp2.add(comp3)
    
    val comp4 = new Company("Optus")
    comp1.add(comp4)
    
    comp1.show(0)
  }
}